(function(){

    /**
     * 以abstract开头的类是抽象类
     *      抽象类和其他类区别不大，只是不能用来创建对象
     *      抽象类是专门用来被继承的类
     *  
    */

    // 抽象类
    abstract class Animal{
        name: string;

        constructor(name: string){
            this.name = name;
        }
        // 抽象方法以abstract开头，没有方法体
        // 抽象方法只能定义在抽象类中，子类必须对该方法实现
        abstract sayHello():void;
    }

    class Dog extends Animal{
        age: number;

        constructor(name:string, age:number){
            super(name);
            this.age = age

        }
        sayHello(){
            console.log("嗷嗷嗷");
            
        }

    }
    


    const dog = new Dog('狗', 66)
    console.log(dog.name);
    dog.sayHello();
    

})();